package com.jzo2o.foundations.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.jzo2o.api.foundations.dto.response.ServeAggregationResDTO;
import com.jzo2o.common.model.PageResult;
import com.jzo2o.foundations.model.domain.Serve;
import com.jzo2o.foundations.model.domain.ServeType;
import com.jzo2o.foundations.model.dto.request.ServePageQueryReqDTO;
import com.jzo2o.foundations.model.dto.request.ServeUpsertReqDTO;
import com.jzo2o.foundations.model.dto.response.ServeAggregationSimpleResDTO;
import com.jzo2o.foundations.model.dto.response.ServeCategoryResDTO;
import com.jzo2o.foundations.model.dto.response.ServeResDTO;

import java.math.BigDecimal;
import java.util.List;

public interface IServeService extends IService<Serve> {
    /**
     * 查询区域设置的服务
     * @param dto 数据
     * @return PageResult
     */
    PageResult<ServeResDTO> pageServe(ServePageQueryReqDTO dto);

    /**
     * 添加/批量添加区域服务
     * @param serveUpsertReqDTOS 数据
     */
    void batch(List<ServeUpsertReqDTO> serveUpsertReqDTOS);

    /**
     * 修改区域服务价格
     * @param id 区域服务id
     * @param price 修改后的价格
     */
    void updatePrice(Long id, BigDecimal price);

    /**
     * 区域服务上架
     * @param id 区域服务id
     */
    void onSala(Long id);

    /**
     * 删除区域服务
     * @param id 区域服务id
     */
    void delete(Long id);

    /**
     * 区域服务下架
     * @param id 区域服务id
     */
    void offSale(Long id);

    /**
     * 区域服务设置为热门
     * @param id 区域服务
     */
    void onHot(Long id);

    /**
     * 区域服务取消热门
     * @param id 区域服务id
     */
    void offHot(Long id);

    /**
     * 查询首页服务类型列表
     * @param regionId 区域id
     * @return List
     */
    List<ServeCategoryResDTO> firstPageServeList(Long regionId);

    /**
     * 查询服务列表
     *
     * @param id 区域id
     * @return List
     */
    List<ServeType> selectServeTypeList(Long id);

    /**
     * 查询首页热门服务数据
     * @param regionId 区域id
     * @return List
     */
    List<ServeAggregationSimpleResDTO> hotServeList(Long regionId);

    /**
     * 根据id查询服务信息
     *
     * @param serveId 服务id
     * @return ServeResDTO
     */
    Serve getById(Long serveId);

    /**
     * 查询服务详情信息
     * @param id 服务id
     * @return List
     */
    ServeAggregationSimpleResDTO serveParticularsInfo(Long id);

    /**
     * 远程调用查询服务信息接口
     * @param serveId 服务id
     * @return ServeResDTO
     */
    ServeAggregationResDTO getServeInfo(Long serveId);
}
